package main

import "fmt"

//channel实例
/*
默认情况下，channel接收和发送数据都是阻塞的，除非另一端已经准备好
这样就使得Goroutines同步变的更加的简单，而不需要显式的lock
*/
func sum(arr []int, ch chan int) {
	total := 0
	for _, v := range arr {
		total += v
	}
	ch <- total //把运算结果发送给管道
}

func main() {
	arr := []int{7, 2, 8, -9, 4, 0}
	ch := make(chan int)
	go sum(arr[:len(arr)/2], ch) //第一个goroutine计算前半数组的和
	go sum(arr[len(arr)/2:], ch) //第二个goroutine计算后半数组的和
	half1, half2 := <-ch, <-ch   //从管道读取两个结果
	fmt.Println(half1, half2, half1+half2)
}
